/**
 * User: Ngannv
 * Email: ngankt2@gmail.com
 * Y!M : ngankt2
 * Date: 9/7/11
 * Time: 8:31 PM
 */
function jDateTime(YYYY, MM, dd, hh, mm, ss) {
    this.year = parseInt(YYYY);
    this.month = parseInt(MM);
    this.date = parseInt(dd);
    this.hour = parseInt(hh);
    this.minute = parseInt(mm);
    this.second = parseInt(ss);
    this.errors = '';

    /**
     * function getTotalDayOfMonth(dd,yyyy)
     * Trả về số ngày trong tháng
     * @return int
     * @exp getTotalDayOfMonth(2,2000)=29
     * */
    this.getTotalDayOfMonth = function(month_int, full_year) {
        var total_day_of_month;
        switch (month_int) {
            case 4:
            case 6:
            case 9:
            case 11:
                total_day_of_month = 30;
                break;
            case 2:
                if (full_year % 4 == 0) {
                    total_day_of_month = 29;
                    break;
                }
                else total_day_of_month = 28;
                break;
            default:
                total_day_of_month = 31;
                break
        }
        return parseInt(total_day_of_month);
    }

    /**
     * Ngannv add & update 12-2008
     * @require function getTotalDayOfMonth(d,m,y);
     * @name  addMoreNumDate(dd_mm_yyyy,dd_add)
     * @return string (d-m-yyyy)
     * @param dd_mm_yyyy = định dạng ngày tháng năm theo chuẩn Việt Nam
     * @param dd_add =  số nguyên dương cộng thêm vào
     * @exp addMoreNumDate('09-10-2011',30)="dd-mm-yyyy"
     */
    this.addMoreNumDate = function(dd_mm_yyyy, dd_add) {
        dd_mm_yyyy = dd_mm_yyyy.split('-');
        var d = eval(dd_mm_yyyy[0]) + dd_add;//num_add= soos ngayf
        var m = eval(dd_mm_yyyy[1]);
        var y = eval(dd_mm_yyyy[2]);
        while (m > 12) {
            y = y + 1;
            m = m - 12;
        }
        if (d > this.getTotalDayOfMonth(m, y)) {
            m = m + 1;
            d = d - this.getTotalDayOfMonth(m, y);
            if (m > 12) {
                y = y + 1;
                m = m - 12;
            }
        }
        return d + '-' + m + '-' + y;
    }
    /*end function convertTimeToStandard*/
    /**
     * Ngannv add & update 07-09-2011
     * @name  convertTimeToInt(dd_mm_yyyy,to_date)
     * @param dd_mm_yyyy = định dạng ngày tháng năm theo chuẩn Việt Nam
     * @param to_date = string('to_date','to_hour','to_second','to_minute','to_month','to_year');
     * @exp convertTimeToInt('09-10-2011','to_date)="09-10-2011"
     * @return int
     */
    this.convertDateTimeToInt = function(dd_mm_yyyy, to_date) {
        if (dd_mm_yyyy == '' || dd_mm_yyyy == null || dd_mm_yyyy == 'undefined') {
            return '';
        }
        if (dd_mm_yyyy.length != 10) {
            this.errors = dd_mm_yyyy + '=> Không đúng định dạng. Định dạng cần theo chuẩn ngày/tháng/năm (dd/MM/YYYY)';
            return this.errors;
        }
        var date = dd_mm_yyyy.substr(0, 2);
        var month = dd_mm_yyyy.substr(3, 2);
        var year = dd_mm_yyyy.substr(6, 4);
        date = eval(date);
        month = eval(month);
        year = eval(year);
        var result = '';
        var num_day = this.getTotalDayOfMonth(month, year);
        result = eval(month * num_day + year * 12 * num_day + date);
        if (to_date != '' || to_date != null || to_date != 'undefined') {
            to_date = to_date.toLowerCase();
            if (to_date == 'to_date') {
                return result;
            }
            else if (to_date == 'to_hour') {
                return result * 24;
            }
            else if (to_date == 'to_minute') {
                return result * 24 * 60;
            }
            else if (to_date == 'to_second') {
                return result * 24 * 60 * 60;
            }
        } else {
            return  result;
        }
    }
    /*end function convertTimeToInt*/

    /**
     *  @Ngannv add 08-09-11
     *  So sánh hai ngày với nhau trả về số ngày chênh lệch và ngày lớn hơn (tương lai hơn :D ^^)
     *  @function compareDateTime(d1,d2)
     *  @param 2 ngày nhập vào theo chuẩn dd:mm:yyyy hoặc dd-mm-yyyy (dd/mm/yyyy)....
     * */
    this.compareDateTime = function(dd_mm_yyyy1, dd_mm_yyyy2) {
        var t_first = this.convertDateTimeToInt(dd_mm_yyyy1, 'to_date');
        var t_second = this.convertDateTimeToInt(dd_mm_yyyy2, 'to_date');
        var result = {'num':0,'obj':dd_mm_yyyy1};
        var num = eval(t_first - t_second);
        result['num'] = Math.abs(num);
        if (num < 0) {
            result['obj'] = dd_mm_yyyy2;
        }
        else {
            result['obj'] = dd_mm_yyyy1;
        }
        return result;
    }
    /*end function compareDateTime*/
}


